package com.ljx.designMode.template;

/**
 * @author LJX
 * @Description: TODO
 * @Date: 2022/11/10 15:27
 * @Version 1.0
 */

/**
 * 在模板模式（Template Pattern）中，一个抽象类公开定义了执行它的方法的方式/模板
 * 。它的子类可以按需要重写方法实现，但是调用将以抽象类中定义的方式进行
 * 定义一个操作中的==算法的骨架==，而将一些步骤延迟到子类中。
 * 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定功能。
 */
public  class TemplateTest {
	public static void main(String[] args) {
		LJL ljl = new LJL();
		ljl.play();
		LJX ljx = new LJX();
		ljx.play();


	}
}


abstract class Game{
	public abstract void initial();
	public abstract void startPlay();
	public abstract void endPlay();

	public  void play(){
		// 初始化游戏
		initial();
		// 开始游戏
		startPlay();
		// 结束游戏
		endPlay();

	}
}

class LJX extends Game{
	@Override
	public void initial() {
		System.out.println("LJX正在初始化游戏");
	}

	@Override
	public void startPlay() {
		System.out.println("LJX开始游戏");

	}

	@Override
	public void endPlay() {
		System.out.println("LJX结束游戏");

	}
}

class LJL extends Game{
	@Override
	public void initial() {
		System.out.println("LJL正在初始化游戏");
	}


	@Override
	public void startPlay() {
		System.out.println("LJL开始游戏");

	}

	@Override
	public void endPlay() {
		System.out.println("LJL结束游戏");

	}
}